package com.bjsxt;
/**Lambda 表达式引用方法*/
/*有时候不是必须使用Lambda 的函数体定义实现，可以利用lambda 表达式指向一个
* 已经被实现的方法*/
/*语法：方法归属者 :: 方法名
*    静态方法的归属者为类名，普通方法归属者为对象  */

//以Test01 中的接口 有返回值，有一个参数  为例
public class Test02 {
    public static void main(String[] args) {
        //要实现的方法在同一个类中
        /*ReturnOneParam returnOneParam = a -> doubleNum(a);
        int value = returnOneParam.method(10);
        System.out.println(value);*/
        //在当前类下
        /*ReturnOneParam returnOneParam = Test02::doubleNum;
        int value02 = returnOneParam.method(10);
        System.out.println(value02);*/

        //方法在不同一个类中 静态方法
        // 方法归属者 :: 方法名  静态方法的归属者为类名
        ReturnOneParam returnOneParam = Test01::doubleNum;
        int value = returnOneParam.method(10);
        System.out.println(value);

        //非静态方法  普通方法归属者为对象
        //首先实例化，取得对象
        Test01 test01 = new Test01();
        ReturnOneParam returnOneParam1 = test01::addTwo;
        int value02 = returnOneParam1.method(9);
        System.out.println(value02);


    }
    //在同一个类中
    /*要求：
    * 1，参数的个数以及类型需要与函数接口中的抽象方法一致
    * 2，返回值类型要与函数接口中的抽象方法的返回值类型一致*/
    //用这个方法作为Test01的ReturnOneParam接口的实现方法
    /*public static int doubleNum(int a){
        return 2*a;
    }*/
}
